package com.zongxingh.falcon.mq.constant;

/**
 * Introduction:  <简介>
 * Package Name:  com.zongxingh.falcon.mq.constant
 * Project Name:  mq
 * Author:  zongxingh
 * Email： zongxingh@163.com
 * Tel: 157*****778
 * Create Time:  2020/10/9 20:12
 */
public class RocketMqConfigConstant {

    /**
     * 客户端的公共配置
     */
    // Name Server地址列表，多个NameServer地址用分号隔开
    public static final String NAME_SRV_ADDR = "rocketmq.namesrvAddr";
    // 本机IP	客户端本机IP地址，某些机器会发生无法识别客户端IP地址情况，需要应用在代码中强制指定
    public static final String CLIENT_IP = "rocketmq.clientIP";
    // DEFAULT	客户端实例名称，客户端创建的多个Producer、Consumer实际是共用一个内部实例（这个实例包含网络连接、线程资源等）
    public static final String INSTANCE_NAME = "rocketmq.instanceName";
    // 4	通信层异步回调线程数
    public static final String CLIENT_CALLBACK_EXECUTOR_THREADS = "rocketmq.clientCallbackExecutorThreads";
    // 30000	轮询Name Server间隔时间，单位毫秒
    public static final String POLL_NAME_SERVER_INTEVAL = "rocketmq.pollNameServerInteval";
    // 30000	向Broker发送心跳间隔时间，单位毫秒
    public static final String HEARTBEAT_BROKER_INTERVAL = "rocketmq.heartbeatBrokerInterval";
    // 5000	持久化Consumer消费进度间隔时间，单位毫秒
    public static final String PERSIST_CONSUMER_OFFSET_INTERVAL = "rocketmq.persistConsumerOffsetInterval";

    /**
     * Producer配置
     */
    // DEFAULT_PRODUCER	Producer组名，多个Producer如果属于一个应用，发送同样的消息，则应该将它们归为同一组
    public static final String PRODUCER_GROUP = "rocketmq.producer.producerGroup";
    // TBW102	在发送消息时，自动创建服务器不存在的topic，需要指定Key，该Key可用于配置发送消息所在topic的默认路由。
    public static final String CREATE_TOPIC_KEY = "rocketmq.producer.createTopicKey";
    // 4	在发送消息，自动创建服务器不存在的topic时，默认创建的队列数
    public static final String DEFAULT_TOPIC_QUEUE_NUMS = "rocketmq.producer.defaultTopicQueueNums";
    //	10000	发送消息超时时间，单位毫秒
    public static final String SEND_MSG_TIMEOUT = "rocketmq.producer.sendMsgTimeout";
    //	4096	消息Body超过多大开始压缩（Consumer收到消息会自动解压缩），单位字节
    public static final String COMPRESS_MSG_BODY_OVER_HOWMUCH = "rocketmq.producer.compressMsgBodyOverHowmuch";
    //	FALSE	如果发送消息返回sendResult，但是sendStatus!=SEND_OK，是否重试发送
    public static final String RETRY_ANOTHER_BROKER_WHEN_NOT_STORE_OK = "rocketmq.producer.retryAnotherBrokerWhenNotStoreOK";
    //	2	如果消息发送失败，最大重试次数，该参数只对同步发送模式起作用
    public static final String RETRY_TIMES_WHEN_SEND_FAILED = "rocketmq.producer.retryTimesWhenSendFailed";
    //	4MB	客户端限制的消息大小，超过报错，同时服务端也会限制，所以需要跟服务端配合使用。
    public static final String MAX_MESSAGE_SIZE = "rocketmq.producer.maxMessageSize";
    //		事务消息回查监听器，如果发送事务消息，必须设置
    public static final String TRANSACTION_CHECK_LISTENER = "rocketmq.producer.transactionCheckListener";
    //	1	Broker回查Producer事务状态时，线程池最小线程数
    public static final String CHECK_THREAD_POOL_MIN_SIZE = "rocketmq.producer.checkThreadPoolMinSize";
    //	1	Broker回查Producer事务状态时，线程池最大线程数
    public static final String CHECK_THREAD_POOL_MAX_SIZE = "rocketmq.producer.checkThreadPoolMaxSize";
    //	2000	Broker回查Producer事务状态时，Producer本地缓冲请求队列大小
    public static final String CHECK_REQUEST_HOLD_MAX = "rocketmq.producer.checkRequestHoldMax";
    // null	该参数是在Producer创建时传入的，包含消息发送前的预处理和消息响应后的处理两个接口，
    // 用户可以在第一个接口中做一些安全控制或者其他操作。
    public static final String RPC_HOOK = "rocketmq.producer.RPCHook";

    /**
     * PushConsumer配置
     */
    //	DEFAULT_CONSUMER	Consumer组名，多个Consumer如果属于一个应用，
    //	订阅同样的消息，且消费逻辑一致，则应该将它们归为同一组
    public static final String CONSUMER_GROUP = "rocketmq.pushConsumer.consumerGroup";
    //	CLUSTERING	消费模型支持集群消费和广播消费两种
    public static final String MESSAGE_MODEL = "rocketmq.pushConsumer.messageModel";
    //	CONSUME_FROM_LAST_OFFSET	Consumer启动后，默认从上次消费的位置开始消费，这包含两种情况：
    //	一种是上次消费的位置未过期，则消费从上次中止的位置进行；一种是上次消费位置已经过期，则从当前队列第一条消息开始消费
    public static final String CONSUME_FROM_WHERE = "rocketmq.pushConsumer.consumeFromWhere";
    //	半个小时前	只有当consumeFromWhere值为CONSUME_FROM_TIMESTAMP时才起作用。
    public static final String CONSUME_TIMESTAMP = "rocketmq.pushConsumer.consumeTimestamp";
    //	AllocateMessageQueueAveragely	Rebalance算法实现策略
    public static final String ALLOCATE_MESSAGE_QUEUE_STRATEGY = "rocketmq.pushConsumer.allocateMessageQueueStrategy";
    //		订阅关系
    public static final String SUBSCRIPTION = "rocketmq.pushConsumer.subscription";
    //		消息监听器
    public static final String MESSAGE_LISTENER = "rocketmq.pushConsumer.messageListener";
    //		消费进度存储
    public static final String OFFSET_STORE = "rocketmq.pushConsumer.offsetStore";
    //	10	消费线程池最小线程数
    public static final String CONSUME_THREAD_MIN = "rocketmq.pushConsumer.consumeThreadMin";
    //	20	消费线程池最大线程数
    public static final String CONSUME_THREAD_MAX = "rocketmq.pushConsumer.consumeThreadMax";
    //	2000	单队列并行消费允许的最大跨度
    public static final String CONSUME_CONCURRENTLY_MAX_SPAN = "rocketmq.pushConsumer.consumeConcurrentlyMaxSpan";
    //	1000	拉消息本地队列缓存消息最大数
    public static final String PULL_THRESHOLD_FOR_QUEUE = "rocketmq.pushConsumer.pullThresholdForQueue";
    //	0	拉消息间隔，由于是长轮询，所以为0，但是如果应用为了流控，也可以设置大于0的值，单位毫秒
    public static final String PULL_INTERVAL = "rocketmq.pushConsumer.pullInterval";
    //	1	批量消费，一次消费多少条消息
    public static final String CONSUME_MESSAGE_BATCH_MAX_SIZE = "rocketmq.pushConsumer.consumeMessageBatchMaxSize";
    //	32	批量拉消息，一次最多拉多少条
    public static final String PULL_BATCH_SIZE = "rocketmq.pushConsumer.pullBatchSize";


    private RocketMqConfigConstant() {
    }

}
